package main

import (
	"fmt"
	"runtime"
	"time"
)

// 子goroutine
func newTask() {
	i := 0
	for {
		i++
		fmt.Printf("new Gorooutine : i= %d\n", i)
		time.Sleep(1 * time.Second)
	}
}

// 主goroutine
//func main() {
//	// 创建一个go协程, 去执行newTask()方法
//	go newTask()
//
//	i := 0
//
//	for {
//		i++
//		fmt.Printf("main Gorooutine : i= %d\n", i)
//		time.Sleep(1 * time.Second)
//	}
//}

func main() {

	// 匿名无参函数
	go func() {
		defer fmt.Println("A.defer")

		func() {
			defer fmt.Println("B.defer")
			runtime.Goexit() // 退出当前协程
			fmt.Println("B")
		}()
		fmt.Println("A")
	}()

	// 匿名有参有返回值函数，需要使用channel获取协程函数返回值
	go func(a int, b int) bool {
		fmt.Println("a=", a, ",b=", b)
		return true
	}(10, 20)

	for {
		time.Sleep(1 * time.Second)
	}
}
